// 处理登录和注册的函数
const db = require('../db/index')
// 给密码加密的中间件
const bcrypt = require('bcrypt')
// 导入jwt生成token
const jwt = require('jsonwebtoken')
//导入jwt获取生成token密钥
const jwtconfig = require('../jwt_config/index')
exports.regiest = (req, res) => {
    //获取请求体的数据
    const reginfo = req.body
    console.log('1',reginfo);
    
    console.log(req.body);

    // 判断请求体里的数据是否为空
    if (!reginfo.account || !reginfo.password) {
        return res.no('账号密码不能为空')
    }
    const sql = 'select * from users where account=?'
    db.query(sql, reginfo.account, (err, data) => {
        // 执行sql失败
        if (err) return res.dbno('数据库操作失败111')
        // 判断账号是否存在
        if (data.length > 0) return res.no('账号已存在')
        // 对密码进行加密
        //使用bcrypt中间件加密
        //加密的对象，加密的长度
        reginfo.password = bcrypt.hashSync(reginfo.password, 10)
        // 默认身份
        const identity = '普通用户'
        //创建时间
        const create_time = new Date()
        // 添加用户
        const addsql = 'insert into users set ?'
        db.query(addsql, { account: reginfo.account, password: reginfo.password, identity, create_time, name: reginfo.name, email: reginfo.email, status: 0 }, (err, data) => {
            // 执行sql失败
            if (err) return res.dbno(err)
            // data.affectedRows影响的行数
            if (data.affectedRows !== 1) return res.no('注册失败')
            return res.send({
                status: 200,
                message: "注册成功"
            })
        })
    })

}
// 安装生成token的中间件 jsonwebtoken
// 解析token的中间件 express-jwt
exports.login = (req, res) => {
    const logininfo = req.body
    const sql = 'select * from users where account=?'
    db.query(sql, logininfo.account, (err, data) => {
        // 执行sql失败
        if (err) return res.dbno('数据库操作失败333')
        // 判断账号是否存在
        if (data.length !== 1) return res.no('账号不存在，请注册')
        //更具前端传递过来的密码 跟后端对应的密码进行匹配
        const comparepwd = bcrypt.compareSync(logininfo.password, data[0].password)
        console.log(comparepwd);
        console.log(data);
        
        if (!comparepwd) {
            return res.no('登录失败密码错误')
        }
        // 判断账号是否被冻结
        if (data[0].status == 1) {
            return res.no('账号被冻结')
        }
        // 生成token 剔除 密码 头像 创建时间 更新时间
        const userinfo = {
            ...data[0], password: '',
            imageUrl: '',
            create_time: '',
            updata_time: ''
        }

        //生成token
        const tokenStr = jwt.sign(userinfo, jwtconfig.jswSecretKey, {
            expiresIn: '7h'
        })
        //  console.log(tokenStr);

        //发送数据
        return res.send({
            status: 200,
            message: '登录成功',
            data: { ...data[0], password: '不告诉你' },
            token: 'Bearer ' + tokenStr
        })
    })
}
